多對多欄位,書有很多本,但作者不只有一個。
class BookName(models.Model):
    _name = 'book.name'
    _description = "book's name model"
    
    name = fields.Char(string='Name', required=True)
    author = fields.Many2many('author', 'author_book_name_tag', 
                         'book_name', 'author_name',string='Author')
在使用Many2many欄位時,odoo會在DB中生成一個新Table,用來記錄book_name與author_name的關聯,在上面所舉的例子中,會發現多對多欄位有好幾個屬性,分別是author(關聯的Model)、author_book_name_tag(我們自訂的Table名稱)、booke_id(BookName所對應的欄位)、author(Author所對應的欄位),在這當中如果我們沒有設定Tabel名與對應的欄位,odoo也會自動生成Table的名稱就會是BookName_author_rel、欄位則是book_id、 author_id。
Many2many的parameter:
comodel_name(必填):這是與當前模型建立多對多關係的目標模型的名稱,它是一個字符串,例如
表示當前模型的記錄可以與 author模型的記錄建立多對多關聯。
relation:這是用於存儲多對多關係的中間表的名稱。如果不指定,Odoo將自動生成一個中間表。通常情況下,您不
需要指定這個參數。
string:這是字段的可選標籤,通常是一個人類可讀的字符串,用於界面上顯示字段的標籤。
required:一個布爾值,指定字段是否為必填字段。如果設置為True,用戶必須為這個字段提供值。
readonly:一個布爾值,指定字段是否為只讀字段。如果設置為True,則該字段將只能查看,不能編輯。
ondelete:指定當目標記錄被刪除時,如何處理關聯的記錄。常見的值包括 set null(將關聯字段設置為空)和 cascade(刪除關聯的記錄)。
domain:一個選擇器函數或域列表,用於篩選可選擇的目標記錄。
context:一個字典,用於設置與這個字段相關的上下文,可以在計算字段值時使用。
help:一個字符串,用於提供有關字段用途的說明。
index:一個布爾值,指定是否在該字段上建立數據庫索引。通常在大型數據集上查詢這個字段時使用。
limit:一個整數,限制可選擇的目標記錄的數量。如果設置了限制,用戶將無法選擇超過限制數量的目標記錄。
使用Many2many欄位,常用到的程度其實跟Many2one差不多,不過使用上還是需要依照情境去選擇的。